package com.example.demo.service;


import com.example.demo.dto.*;
import com.example.demo.entity.Product;
import com.example.demo.mapper.ProductMapper;
import com.example.demo.model.PageBean;
import com.example.demo.model.Result;
import com.example.demo.utils.OssUtil;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.util.*;

@Service
@AllArgsConstructor
@Transactional
public class ProductService {
    private OssUtil ossUtil;
    private ProductMapper productMapper;

    public Result getAllProducts(QueryProductDto queryProductDto, PaginationDto paginationDto){
        // 因为是 like 查询所以要拼接 %
        Map<String, Object> params = new HashMap<>();
        if(StringUtils.hasText(queryProductDto.getId())) {
            params.put("id", "%" + queryProductDto.getId() + "%");
        }

        if(StringUtils.hasText(queryProductDto.getName())) {
            params.put("name", "%" + queryProductDto.getName() + "%");
        }
        Page<Product> page = PageHelper.startPage((int) paginationDto.getCurrent(),paginationDto.getSize());
        productMapper.getAllProducts(params);
        PageBean<Product> pageBean = new PageBean<>();
        pageBean.setCurrent(page.getPageNum());
        pageBean.setData(page.getResult());
        pageBean.setTotal(page.getTotal());
        pageBean.setPages(page.getPages());
        return Result.buildSuccess(pageBean);



    }

    public Result changeStatus(StatusDto statusDto) {
        productMapper.updateStatus(statusDto);
        return Result.buildSuccess();
    }

    public Result getById(Integer id) {
        return Result.buildSuccess(productMapper.getById(id));

    }

    public void addProduct(ProductDto productDto, MultipartFile[] fileList) {
        productDto.setCreate_time(new Date());
        productDto.setUpdate_time(new Date());
        productMapper.addProduct(productDto);

        List<ProductImgDto> productImgDtos = new ArrayList<>();

        ArrayList<String> urlList = new ArrayList<>();
        for (MultipartFile multipartFile : fileList) {
                String url = ossUtil.uploadFileAvatar(multipartFile);
                urlList.add(url);
                System.out.println(url);
        }
        for (int i = 0; i < urlList.size(); i++) {
            ProductImgDto productImgDto = new ProductImgDto();
            if (i==0){
                productImgDto.setIsMain(1);
            }else {
                productImgDto.setIsMain(0);
            }
            productImgDto.setItem_id(productDto.getId());
            productImgDto.setUrl(urlList.get(i));
            productImgDto.setSort(i+1);
            productImgDto.setCreate_time(new Date());
            productImgDto.setUpdate_time(new Date());
            productImgDtos.add(productImgDto);
        }

        productDto.setProductImgDtos(productImgDtos);
        productMapper.addProductImg2(productDto);


    }

    public boolean delById(Integer id) {
        return  (productMapper.delById(id) >0) && (productMapper.deleteImgById(id) >0);

    }

    public void updateProduct(QueryProductDto formdata) {
        productMapper.updateProduct(formdata);
        Integer id =Integer.parseInt(formdata.getId());
        productMapper.deleteImgById(id);


        ProductDto productDto = new ProductDto();
        List<ProductImgDto> productImgDtos = new ArrayList<>();

        String[] fileList = formdata.getFileList();

        for (int i = 0; i < fileList.length; i++) {
            ProductImgDto productImgDto = new ProductImgDto();
            if (i==0){
                productImgDto.setIsMain(1);
            }else {
                productImgDto.setIsMain(0);
            }
            productImgDto.setItem_id(id);
            productImgDto.setUrl(fileList[i]);
            productImgDto.setSort(i+1);
            productImgDto.setCreate_time(new Date());
            productImgDto.setUpdate_time(new Date());
            productImgDtos.add(productImgDto);
        }

        productDto.setProductImgDtos(productImgDtos);
        productMapper.addProductImg2(productDto);


    }

//    public void addProduct(ProductDto productDto) {
//        productMapper.addProduct(productDto);
//        productDto.setCreate_time(new Date());
//        productDto.setUpdate_time(new Date());
//        List<String> list = productDto.getUrllist();
//        if (list.size()>0){
//            productDto.setSort(1);
//            productMapper.addProductImg1(productDto.getId(),list.get(0));
//        }
//        if (list.size()>1) {
//            list.remove(0);
//            productDto.setUrllist(list);
//            productMapper.addProductImg2(productDto);
//        }
//
//
//    }
}
